package com.ftg.learn.util;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *
 * gateway :
 * 功能 ： 网关，用来把后面所有的方法 统一入口的功能模块
 * 1 : xml的配置方式，routes 路由  id uri 地址 | lb  predicate filter
 * 2 ： 我们讲解一下，把 gateway的配置文件提取到nacos config 运维人员，以及开发人员可以自行的在系统运行阶段，动态修改配置
 * 3 : 全局时间
 * 4 : cros :  前后台分离遇到的概念很高
 *  4.1 ： cros xml里面官网不好用
 *  4.2 : CorsFilter 通过原始filter重写的方式也试过了不好用
 *  4.3 : 通过 servlet filter 重写我们的 crosfilter也不好用
 *  生效的方案
 *  4.4 : 通过springboot @CrossOrigin()好用  : 是不是要在我们每一个模型restful api里面添加注解
 *  4.4.1 缺点 第一个模块 全是编写，不利用我们复用
 *  4.5 : 我们的想法，还是想在gateway一处编写，所有的子模块全部通用 (推荐)
 *  4.5.1 : CrosConfig 编写 自定义过滤器  实现 GlobalFilter 接口以及ordered
 *  4.5.1.1 重写一下filter方法
 *  4.5.2 CrosFilter 完成加 CrosConfig 到spring 容器里面的操作
 * 5 : 编写权重负载均衡策略 (还不是特别 )
 *  5.1 MyWeightLb NacosLoadBalancerConfig  (生产环境 当中运维人员可能会需要根据电脑的配置完成相应的负载 )
 * @author kangjx
 * @createTime 2023/1/5
 */
@Configuration
public class CrosFilter{

    /**
     * 声明 全局配置类，完成cros 配置引入
     * @return GlobalFilter
     */
    @Bean
    public GlobalFilter customFilter() {
        return new CrosConfig();
    }
}
